package two_xia.ex9.Demo10;

abstract class Account {
    // 模板方法，定义计算利息的流程
    public final void calculateInterest() {
        // 第一步：查询用户信息
        User user = queryUser();
        // 第二步：判断用户类型
        if (isCurrentAccount(user)) {
            // 第三步：对于活期账户，使用活期利息计算方式
            System.out.println("活期账户利息计算：" + calculateCurrentInterest(user));
        } else if (isSavingAccount(user)) {
            // 第三步：对于定期账户，使用定期利息计算方式
            System.out.println("定期账户利息计算：" + calculateSavingInterest(user));
        }
        // 第四步：显示利息
        displayInterest();
    }

    // 第一步的具体实现，由子类提供
    protected abstract User queryUser();

    // 第二步的具体实现，由子类提供
    protected abstract boolean isCurrentAccount(User user);

    // 第二步的具体实现，由子类提供
    protected abstract boolean isSavingAccount(User user);

    // 第三步的具体实现，由子类提供
    protected abstract double calculateCurrentInterest(User user);

    // 第三步的具体实现，由子类提供
    protected abstract double calculateSavingInterest(User user);

    // 第四步的具体实现，由子类提供
    protected abstract void displayInterest();
}